package com.koron.car.web.carledger.service;

import com.koron.car.web.carledger.bean.query.CarQuery;
import com.koron.car.web.carledger.bean.vo.CarVO;
import org.koron.ebs.mybatis.SessionFactory;

import java.io.File;
import java.util.List;

/**
 * (Car)表服务接口
 *
 * @author twcao
 * @since 2022-02-26 11:46:50
 */
public interface CarService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    CarVO queryById(SessionFactory factory, String id);

    /**
     * 查询多条数据
     * @param car 查询起始位置
     * @return 对象列表
     */
    List<CarVO> queryList(SessionFactory factory, CarQuery car);

    /**
     * 查询可调度的车辆
     * @param factory
     * @param query
     * @return
     */
    List<CarVO> schedulable(SessionFactory factory, CarQuery query);

    /**
     * 新增数据
     *
     * @param car 实例对象
     * @return 实例对象
     */
    CarVO saveOrUpdate(SessionFactory factory, CarVO car);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    Boolean deleteById(SessionFactory factory, String id);

    /**
     * 通过主键逻辑删除数据
     * @param id 主键
     * @return 是否成功
     */
    Boolean hiddenById(SessionFactory factory, String id);

    Boolean updateState(SessionFactory factory, String carId, String state);

    Boolean updateDistance(SessionFactory factory, String carId, Double currDistance, Double totalDistance);

    List<CarVO> getBoundCar(SessionFactory factory, CarQuery query);

    int countCarByPrepareType(SessionFactory factory, String prepareType);

    File createMiniProgramQRCode(String eqId, String name, String envVersion);
}
